/****************************************************************
 **  Nombre: DAOCarrera.java                          *
 **  Version: 1.0.0                                             *
 **  Diagrama: GAPI v4.5.3                                      *
 **  Autor: Alonso Orozco                        *
 **  Creado: 13-febrero-2013
 *   Caso de uso: MGC1,MGC2,MGC3
 **  Modificado: 15-febrero-2013                                               *
 ***************************************************************/
package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.Carrera;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Controlador de las carreras en la base de datos.
 * 
 */
public class DAOCarrera {

    private Connection conexion = null;
    private static final String TABLA_CARRERA = "carreras";
    private static final String COLUMNA_NOMBRE = "nombre";
    private static final String COLUMNA_ABREVIATURA = "abreviatura";
    private static final String COLUMNA_CVE_CARRERA = "clave_carrera";
    private AccesoBaseDatos acceso = new AccesoBaseDatos();
/**
 * Constructor que inicializa la conexion con la base de datos.
 */
    public DAOCarrera() {
        this.conexion = acceso.abrirConexion();
    }
/**
 * Verifica si existe una carrera
 * @param carrera EL objeto de la carrera.
 * @return Verdadero o falso si existe o no respectivamente.
 */
    public boolean existeCarrera(Carrera carrera) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String querySearch = "SELECT * FROM " + TABLA_CARRERA + " WHERE " + COLUMNA_NOMBRE + " = '" + carrera.getNombre() + "' AND "
                    + COLUMNA_ABREVIATURA + " = '" + carrera.getAbreviatura() + "'";
            ResultSet resultado = sentencia.executeQuery(querySearch);
         

            int contadorDeRegistros = 0;
            while (resultado.next()) {
                contadorDeRegistros++;
            }

            if (contadorDeRegistros != 0) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DAOCuentas.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
/**
 * Registra la carrera en la base de datos.
 * @param carrera La carrera a registrar.
 */
    public void registrarCarrera(Carrera carrera) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryInsertar = "INSERT INTO " + TABLA_CARRERA + " (" + COLUMNA_NOMBRE + ", " + COLUMNA_ABREVIATURA
                    + ") VALUES ('" + carrera.getNombre() + "', '" + carrera.getAbreviatura() + "');";
            sentencia.executeUpdate(queryInsertar);
        } catch (SQLException ex) {
            System.out.println("Ocurió un problema al tratar de registrar la carrera");
        }
    }
/**
 * Cerrar conexion a la base de datos.
 */
    public void cerrarConexionACarrera() {
        acceso.cerrarConexion(conexion);
    }
/**
 * Actualiza la carrera de la base de datos.
 * @param carreraActual Carrera actual que se va a actualizar.
 * @param carreraNueva Carrera con nuevos datos.
 */
    public void actualizarCarrera(Carrera carreraActual, Carrera carreraNueva) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryUpdate = "UPDATE " + TABLA_CARRERA + " SET " + COLUMNA_NOMBRE + " = '" + carreraNueva.getNombre() + "' , " 
                    + COLUMNA_ABREVIATURA + " = '" + carreraNueva.getAbreviatura() + "'"
                    + " WHERE " + COLUMNA_CVE_CARRERA + " = '" + carreraActual.getClaveCarrera() + "'"
                    + ";";
            
            sentencia.executeUpdate(queryUpdate);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de actualizar los datos de la carrera");
        }
    }
/**
 * Busca todas las carreras.
 * @return El arreglo de las carreras de la base de datos.
 */
    public ArrayList<Carrera> buscarTodasLasCarreras() {
        ArrayList <Carrera> registros = new ArrayList();
        ResultSet resultado = null;

        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String querySearch = "SELECT * FROM " + TABLA_CARRERA+" ORDER BY "+COLUMNA_CVE_CARRERA+" ASC";
            resultado = sentencia.executeQuery(querySearch);
            while (resultado.next()) {
                String nombreC = resultado.getObject(2).toString();
                String abrev = resultado.getObject(3).toString();
                
                int clave = resultado.getInt(1);
                //Carrera carrera = new Carrera(nombreC, abrev);
                Carrera carrera = new Carrera(clave,nombreC,abrev);
                registros.add(carrera);
            }

        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de buscar las carreras en la base de datos");
        }
        return registros;
    }
/**
 * Eliminar carrera.
 * @param claveCarrera Nombre de la carrera. 
 */
    public void eliminarCarrera(int claveCarrera) {
    try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String deleteQuery = "DELETE FROM " + TABLA_CARRERA + " WHERE " + COLUMNA_CVE_CARRERA + " = '" + claveCarrera + "'";
            sentencia.executeUpdate(deleteQuery);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de eliminar la cuenta");
        }
    }
    /**
     * Busca una carrera
     * @param claveCarrera Clave de la carrera.
     * @return La carrera encontrada.
     */
    public Carrera buscarCarrera(int claveCarrera){
        try{
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String query = "SELECT * FROM "+TABLA_CARRERA+" WHERE "+COLUMNA_CVE_CARRERA+"='"+claveCarrera+"'";
            ResultSet resultado = sentencia.executeQuery(query);
            if(resultado.next()){
                resultado.first();
                int cveCarrera = resultado.getInt(1);
                String nombre = resultado.getString(2);
                String abreviatura = resultado.getString(3);
                Carrera c = new Carrera(cveCarrera,nombre,abreviatura);
                return c;
            }
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de eliminar la cuenta");
        }
        return null;
    }
}
